RAID (Redundant Array of Independent/Inexpensive Disks) is an organization of data on a plurality of disks to achieve varying levels of availability and performance. One performance enhancing feature of RAID is "striping" which spreads data across the disks in the array. The data is broken down into segments referred to as "chunks." A chunk is a group of consecutively numbered blocks that are placed consecutively on a single disk before placing blocks on a different disk. A block is the smallest unit of data that can be read or written to a disk. Thus, a chunk is the unit of data interleaving for a RAID array. For example, in a four disk RAID array the first chunk is placed on the first disk, the second chunk is placed on the second disk, the third chunk is placed on the third disk, the fourth chunk is placed on the fourth disk, the fifth chunk is placed on the first disk and so on. This spreading of data increases performance through load balancing.
As is well know, there are several levels of RAID, each of which has different characteristics that affect performance and availability. One common aspect of all RAID levels is that each array appears as one large virtual disk to the user. RAID storage systems can be implemented in hardware or software. In the hardware implementation the RAID algorithms are built into a controller that connects to the computer I/O bus. In the software implementation the RAID algorithms are incorporated into software that runs on the main processor in conjunction with the operating system. Both the hardware and software implementations of RAID are well known to those of ordinary skill in the field.
RAID level 4 (RAID-4) and RAID level 5 (RAID-5) are organizations of data for an array of n+1 disks that provide enhanced performance through the use of striping and enhanced data availability through the use of parity. Each disk in the RAID array is referred to as a member of the array. Furthermore, while disks are referred to throughout, any equivalent storage media could be used as would be apparent to one of ordinary skill in the field. A parity block is associated with every n data blocks. The data and parity information is distributed over the n+1 disks so that if a single disk fails, all of the data can be recovered. A strip is the collection of a parity chunk and all data chunks that contribute to it. RAID-4 is a level of organization of data for a RAID array where data blocks are organized into chunks which are interleaved among the disks and protected by parity and all of the parity, is written on a single disk. RAID-5 is a level of organization of data for a RAID array where data blocks are organized in chunks which are interleaved among the disks and protected by parity and the parity information is distributed over all of the disks in the array. In both RAID-4 and RAID-5 the ensemble or array of n+1 disks appears to the user as a single, more highly available virtual disk.
The contents of each bit of the parity block is the Exclusive-OR of the corresponding bit in each of the n corresponding data blocks. In the event of the failure of a single disk in the array, the data from a given data block on the failed disk is regenerated by calculating the Exclusive-OR of the contents of the corresponding parity block and the n-1 data blocks remaining on the surviving disks that contributed to that parity block. A spare disk may be added to the array to replace the failed disk. A block or set of blocks is repaired by writing the regenerated data. The regeneration and repair of data for a data block or set of data blocks on a disk in a RAID array is referred to as reconstruction.
Under some circumstances a failed disk in the RAID array cannot be reconstructed or replaced promptly. During the time that the failed disk remains out of the RAID array the cost of operations increases and both performance and reliability decrease. Accordingly, if the storage system is to operate for any period of time with a failed disk of the RAID array it is desirable to improve both performance and reliability and prevent an increase in the cost of operation.